import numpy as np
import matplotlib.pyplot as plt

# 定义矩形信号 f1(t) 和 f2(t)
t = np.linspace(-2, 2, 1000)  # 时间范围覆盖 [-2, 2]
dt = t[1] - t[0]              # 时间步长
f1 = np.where((t >= -1) & (t <= 1), 1, 0)  # 矩形脉冲 [-1, 1]
f2 = f1.copy()                # 第二个相同信号

# 计算卷积（注意积分近似修正）
convolution = np.convolve(f1, f2, mode='full') * dt  # 乘以 dt 保证幅度正确

# 生成卷积结果的时间轴
t_conv = np.linspace(-2 * 1, 2 * 1, len(convolution))  # 时间范围 [-2, 2]

# 绘图设置
plt.figure(figsize=(10, 5))

# 绘制输入信号
plt.subplot(1, 2, 1)
plt.plot(t, f1, label='$f_1(t)$', color='blue', linewidth=2)
plt.plot(t, f2, label='$f_2(t)$', color='orange', linestyle='--', linewidth=2)
plt.title('Input Signals')
plt.xlabel('$t$', fontsize=12)
plt.ylabel('Amplitude', fontsize=12)
plt.xticks([-1, 0, 1], ['-1', '0', '1'])
plt.yticks([0, 1])
plt.grid(True, linestyle='--', alpha=0.6)
plt.legend()

# 绘制卷积结果
plt.subplot(1, 2, 2)
plt.plot(t_conv, convolution, label='$f_1(t) * f_2(t)$', color='red', linewidth=2)
plt.title('Convolution Result')
plt.xlabel('$t$', fontsize=12)
plt.ylabel('Amplitude', fontsize=12)
plt.xticks([-2, -1, 0, 1, 2], ['-2', '-1', '0', '1', '2'])
plt.yticks([0, 1, 2], ['0', '1', '2'])
plt.xlim(-2.2, 2.2)
plt.grid(True, linestyle='--', alpha=0.6)
plt.legend()

plt.tight_layout()
plt.show()